package com.lifeverse.dto;

import com.lifeverse.entity.ConsciousnessState;
import jakarta.validation.constraints.*;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 意识状态更新数据传输对象
 */
@Data
public class ConsciousnessStateUpdateDTO {
    
    private ConsciousnessState.StateType stateType;
    
    @DecimalMin(value = "0.00", message = "意识强度级别不能小于0")
    @DecimalMax(value = "100.00", message = "意识强度级别不能大于100")
    private BigDecimal intensityLevel;
    
    @Size(max = 1000, message = "注意力焦点描述不能超过1000个字符")
    private String attentionFocus;
    
    @Size(max = 1000, message = "情感状态描述不能超过1000个字符")
    private String emotionalState;
    
    @DecimalMin(value = "0.00", message = "认知负载不能小于0")
    @DecimalMax(value = "100.00", message = "认知负载不能大于100")
    private BigDecimal cognitiveLoad;
    
    @DecimalMin(value = "0.00", message = "创造力指数不能小于0")
    @DecimalMax(value = "100.00", message = "创造力指数不能大于100")
    private BigDecimal creativityIndex;
    
    @DecimalMin(value = "0.00", message = "逻辑清晰度不能小于0")
    @DecimalMax(value = "100.00", message = "逻辑清晰度不能大于100")
    private BigDecimal logicClarity;
    
    @DecimalMin(value = "0.00", message = "直觉敏感度不能小于0")
    @DecimalMax(value = "100.00", message = "直觉敏感度不能大于100")
    private BigDecimal intuitionSensitivity;
    
    @DecimalMin(value = "0.00", message = "社交活跃度不能小于0")
    @DecimalMax(value = "100.00", message = "社交活跃度不能大于100")
    private BigDecimal socialActivity;
    
    @DecimalMin(value = "0.00", message = "学习效率不能小于0")
    @DecimalMax(value = "100.00", message = "学习效率不能大于100")
    private BigDecimal learningEfficiency;
    
    @DecimalMin(value = "0.00", message = "记忆活跃度不能小于0")
    @DecimalMax(value = "100.00", message = "记忆活跃度不能大于100")
    private BigDecimal memoryActivity;
    
    @DecimalMin(value = "0.00", message = "决策能力不能小于0")
    @DecimalMax(value = "100.00", message = "决策能力不能大于100")
    private BigDecimal decisionCapability;
    
    @Size(max = 200, message = "状态触发因素不能超过200个字符")
    private String triggerFactor;
    
    @Size(max = 500, message = "状态结果描述不能超过500个字符")
    private String outcomeDescription;
    
    @Size(max = 500, message = "关联实体ID不能超过500个字符")
    private String relatedEntityIds;
    
    @Size(max = 2000, message = "状态数据不能超过2000个字符")
    private String stateData;
    
    @DecimalMin(value = "0.00", message = "状态质量评分不能小于0")
    @DecimalMax(value = "100.00", message = "状态质量评分不能大于100")
    private BigDecimal qualityScore;
    
    private Boolean isAnomaly;
    
    private LocalDateTime endTimestamp;
}